package com.szwistar.common.datastruct;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;

public class PropertiesEx extends Properties {
	private static final long serialVersionUID = -6836376141950460969L;

	// 存储文件路径
	private File storePath = null;
    public File getStorePath() { return storePath; }

    public PropertiesEx(File path) {
    	super();
    	storePath = path.getAbsoluteFile();

    	InputStream ins = null;
        try {
            // 加载配置文件数据
            ins = new FileInputStream(path);
            // Properties 的 load(ins) 函数只能支持 ISO-8859-1 编码，不支持 UTF-8 编码！
            // 所以不能直接使用 load(ins)，而要自己创建一个 BufferedReader 来读取文件
            //load(ins);
            BufferedReader br = new BufferedReader(new InputStreamReader(ins));
            load(br);
        } catch (Exception e) {
			e.printStackTrace();
		} finally {
        	if(ins != null) { try{ ins.close(); } catch(Exception e){}; ins = null; }
        }
    }

    public PropertiesEx(String path) {
    	this(new File(path));
    }

    /**
     * 如果 key 的值不为空，则设置默认值
     * @param key 键名称
     * @param value 默认值
     * @return true: 之前的值为空，设置成功；false: 之前的值不为空，未修改
     */
    public boolean setDefault(String key, Object value) {
    	if(containsKey(key) || key == null || value == null) { return false; }
    	setProperty(key, value.toString());
    	return true;
    }

    public String get(String key) {
    	return getProperty(key);
    }

    public String get(String key, String defaultValue) {
    	return getProperty(key, defaultValue);
    }

    public int getInt(String key, int defaultValue) {
        if (get(key) != null) {
            return Integer.parseInt(get(key));
        }
        return defaultValue;
    }

    public float getFloat(String key, float defaultValue) {
        if (get(key) != null) {
            return Float.parseFloat(get(key));
        }
        return defaultValue;
    }

    public boolean getBool(String key, boolean defaultValue) {
        if (get(key) != null) {
            return ("on".equals(get(key)) || "true".equals(get(key)));
        }
        return defaultValue;
    }
}
